package com.caregiver.watch.business.data.dao;

import com.caregiver.watch.business.data.model.po.HealthBaseData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 健康基础数据Dao
 * @author:
 * @date: 2020-04-05
 */
@Mapper
public interface HealthBaseDataDao {
    /**
     * 插入健康基础数据
     * @param healthBaseData 健康基础数据对象
     * @return 影响行数
     */
    int insert(HealthBaseData healthBaseData);
    
    /**
     * 根据ID更新健康基础数据
     * @param healthBaseData 健康基础数据对象
     * @return 影响行数
     */
    int updateById(HealthBaseData healthBaseData);
    
    /**
     * 根据ID删除健康基础数据
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 根据ID查询健康基础数据
     * @param id 主键ID
     * @return 健康基础数据对象
     */
    HealthBaseData selectById(Long id);
    
    /**
     * 根据用户ID和设备UUID查询健康基础数据列表
     * @param userId 用户ID
     * @param deviceUuid 设备UUID
     * @param dataTime 数据时间
     * @return 健康基础数据列表
     */
    List<HealthBaseData> selectByUserIdAndDeviceUuidAndDataTime(
        @Param("userId") Long userId, 
        @Param("deviceUuid") String deviceUuid, 
        @Param("dataTime") LocalDateTime dataTime
    );
    
    /**
     * 根据数据时间查询健康基础数据列表
     * @param dataTime 数据时间
     * @return 健康基础数据列表
     */
    List<HealthBaseData> selectByDataTime(@Param("dataTime") LocalDateTime dataTime);

    /**
     * 查询用户最后一条健康基础数据
     * @param userId 用户ID
     * @param deviceUuId 设备UUID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 健康基础数据对象
     */
    HealthBaseData queryLastData(@Param("userId") Long userId,
                                 @Param("deviceUuId") String deviceUuId,
                                 @Param("startTime") LocalDateTime startTime,
                                 @Param("endTime") LocalDateTime endTime);

    /**
     * 查询一周的数据
     */
    List<HealthBaseData> queryLastDataList(@Param("userId") Long userId,
                                       @Param("deviceUuId") String deviceUuId,
                                       @Param("startTime") LocalDateTime startTime,
                                       @Param("endTime") LocalDateTime endTime);
}
